package exercise.基础练习;

import java.util.Scanner;

/**
 * 资源限制
 * 时间限制：1.0s   内存限制：256.0MB
 * 问题描述
 * 杨辉三角形又称Pascal三角形，它的第i+1行是(a+b)i的展开式的系数。
 * 它的一个重要性质是：三角形中的每个数字等于它两肩上的数字相加。
 * 下面给出了杨辉三角形的前4行：
 * 1
 * 1 1
 * 1 2 1
 * 1 3 3 1
 * <p>
 * 给出n，输出它的前n行。
 * <p>
 * 输入格式
 * 输入包含一个数n。
 * <p>
 * 输出格式
 * 输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出，中间使用一个空格分隔。请不要在前面输出多余的空格。
 * 样例输入
 * 4
 * 样例输出
 * 1
 * 1 1
 * 1 2 1
 * 1 3 3 1
 * 数据规模与约定
 * 1 <= n <= 34。
 */
public class B06_输出杨辉三角前n行 {
    private static int[][] matrix;//定义一个矩阵

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();//输入行数
        solution(n);//输出杨辉三角前n行
    }

    private static void solution(int n) {
        matrix = new int[n][n];//创建矩阵来模拟三角形
        //每一行行首和行尾赋值为1
        for (int i = 0; i < matrix.length; i++) {
            matrix[i][0] = 1;
            matrix[i][i] = 1;
        }
        //中间需要计算
        for (int i = 2; i < matrix.length; i++) {
            for (int j = 1; j < i; j++) {
                matrix[i][j] = matrix[i - 1][j - 1] + matrix[i - 1][j];
            }
        }
        //输出结果
        printTriangle();
    }

    /**
     * 输出三角形
     */
    private static void printTriangle() {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
    }
}
